﻿<?php
include_once("../../config/dao.cfg.php");
global $sem_pool;


function sem_get_byname($sem_name)
{
	global $sem_pool;
	$semid= $sem_pool[$sem_name[0]];
	if($semid>0)return $semid;
	$path  =qcsapp_cfg_get("path");
	$path = trim($path,"/")."/data/ipc";
	if(!file_exists($path))
	{
		mkdir($path,0777,true);
	}
	$KEY = ftok($path, $sem_name[0] );
	$semid = sem_get($KEY, 1, 0644 | IPC_CREAT);
	if($semid>0)$sem_pool[$sem_name[0]] = $semid;
	return $semid;
}

function sem_p($sem_id)
{
	return  sem_acquire($sem_id);
	
}
function sem_v($sem_id)
{
	return  sem_release($sem_id);
}


function sem_p_name($sem_name)
{
	$sem_id = sem_get_byname($sem_name);
	if($sem_id===FALSE)	return false;
	return sem_p($sem_id);
}

function sem_v_name($sem_name)
{
	$sem_id = sem_get_byname($sem_name);
	if($sem_id===FALSE)	return false;
	return sem_v($sem_id);
}


if($argc>1)
{
	if($argv[1]=="ut_sem")
	{
		for($i=0;$i<3;$i++)
		{
		echo posix_getpid().":try sem_p\r\n";
		if(sem_p_name("t_test_sem")===false)
		{
			echo  posix_getpid().":sem_p FALSE\r\n";
			$eno = posix_errno();
			echo "errnno = $eno,".posix_strerror($eno)."\r\n";
			return ;
		}
		echo   posix_getpid().":sem_p_succcess\r\n";
		sleep(5);
		sem_v_name("t_test_sem");
		echo   posix_getpid().":sem_p_release\r\n";
		sleep(2);
		}
	}
}

?>